package com.xctech.yace.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;


public class TimeUtil {

    /**
     * 获取纳秒
     * @return
     */
    public static Long getNaTime(){
        return System.nanoTime();
    }

    /**
     * 毫秒耗时统计
     * @return
     */
    public static Double calInterval(Long startTime, Long endTime){
        return (endTime-startTime)/1e6;
    }

    /**
     * 秒耗时统计
     * @return
     */
    public static Double calIntervalSecond(Long startTime, Long endTime){
        return (endTime-startTime)/1e9;
    }

    /**
     * 获取毫秒数
     * @return
     */
    public static Long getMillisTime(){
        return System.currentTimeMillis();
    }

    /**
     * 毫秒耗时统计
     * @return
     */
    public static Double calIntervalMill(Long startTime, Long endTime){
        return (endTime-startTime)*1.0;
    }

    /**
     * 获取毫秒数
     * @return
     */
    public static Long getMicroTime(){
        return System.currentTimeMillis()*1000;
    }

    /**
     * 毫秒耗时统计 单位：毫秒
     * @return
     */
    public static Double calIntervalMicro2Mill(Long startTime, Long endTime){
        return (endTime-startTime)/1e3;
    }

    /**
     * 毫秒耗时统计 单位：秒
     * @return
     */
    public static Double calIntervalMicro2Second(Long startTime, Long endTime){
        return (endTime-startTime)/1e6;
    }

    /**
     * 重置时间戳
     */
    public static String resetJsTime(String jsonStr){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove("jstime");
        model.put("jstime", TimeUtil.getMicroTime());
        return model.toJSONString();
    }

    /**
     * 重置时间戳
     */
    public static String resetJsTime(String jsonStr,String scnTime){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove("jstime");
        model.put("jstime", scnTime);
        return JSONObject.toJSONString(model, SerializerFeature.WriteMapNullValue);
    }

    /**
     * 重置时间戳
     */
    public static String resetScnTime(String jsonStr){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove("scntime");
        model.put("scntime", TimeUtil.getNaTime());
        return model.toJSONString();
    }

    /**
     * 重置时间戳
     */
    public static String resetScnTime(String jsonStr,String scnTime){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove("scntime");
        model.put("scntime", scnTime);
        return model.toJSONString();
    }

    /**
     * 重置随机参数
     */
    public static String resetValue(String jsonStr,String field){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove(field);
        //xid ---- 0x0003.01a.0000348a   todo 随机 xid
        model.put(field, 1);
        return model.toJSONString();
    }

    /**
     * 重置指定参数
     */
    public static String resetValue(String jsonStr,String field,String value){
        JSONObject model = (JSONObject) JSON.parse(jsonStr);
        model.remove(field);
        model.put(field, value);
        return model.toJSONString();
    }
}
